package main

import (
	"fmt"
	"os"
)

func add(x, y int) int {
	result := x + y
	return result
}

func fn02(i int) int     { return 100 }
func fn03(y int) (r int) { return 200 }

func fn01() {
	fmt.Println("无返回值")
	return
}

func fn4() int {
	a := 100
	return a + 1
}
func fn5() (r int) {
	r = 100
	return r + 2
}
func fn6() (r int) {
	r = 200
	return
}

func fn7() (i int, b bool) {
	// i, b = 100, false
	return
}

func fn8() (i int, err error) {
	if _, err = os.Open("o:/t"); err != nil { // 错误，因为err被重新定义，只能在if中使用，返回值的err就被覆盖了，就是上一行 := 的问题
		return
	}
	return
}

func fn9(num ...int) { // 可变形参
	fmt.Printf("fn9 %T,%[1]v\n", num)
}

func fn10(x, y int, num ...int) {
	fmt.Printf("x=%d,y=%d,num=%v\n", x, y, num)
}

func main() {
	// fmt.Printf("%v\n", fn01)
	// out := add(4, 5)
	// fmt.Println(out)
	// fmt.Printf("fn02 type %T\n", fn02(100))
	// fmt.Printf("fn03 type %T\n", fn03(100))
	// fn01()

	// fmt.Println(fn4())
	// fmt.Println(fn5())
	// fmt.Println(fn6())

	// fmt.Println(fn7())

	// fn9()
	// fn9(1)
	// fn9(1, 2)
	// fn9(1, 2, 3)
	// fn9(1, 2, 3, 4)

	a := []int{1, 2, 3, 4}
	fn10(2, 3, 4, 5)
	fn10(1, 3, a...)
	fn9(a...)
}
